import axios from 'axios'
import { Toast } from 'vant'
import router from '@/router'
import { getToken, removeToken } from './storage'

// 此文件用于封装axios实例  便于发送请求

// 创建axios实例
const instance = axios.create({
  // 基地址
  baseURL: 'https://interview-api-t.itheima.net',
  // 超时时间  请求超过2s直接中断
  timeout: 5000,
  // 请求头
  headers: { 'X-Custom-Header': 'foobar' }
})

// 添加拦截器  (记得给的是instance  直接从官网复制过来时axios)

// 请求拦截器
instance.interceptors.request.use(
  function (config) {
    //  统一携带token
    const token = getToken()
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 直接返回响应的data 实现数据脱壳 方便使用 以后再也不需要写两个data了
    return response.data
  },
  function (error) {
    if (error.response) {
      switch (error.response.status) {
        case 400:
          // 🎯 延长400错误提示时间到4秒
          Toast.fail({
            message: error.response.data?.message,
            duration: 3000 // 4秒显示时间
          })
          break
        case 401:
          // 删除token
          removeToken()
          router.push('/login')
          Toast.fail({
            message: error.response.data?.message || '登录过期',
            duration: 3000
          })
          break
        case 404:
          Toast.fail({
            message: '请求的资源不存在',
            duration: 2000
          })
          break
        case 500:
          Toast.fail({
            message: '服务器错误',
            duration: 2000
          })
          break
      }
    }
    return Promise.reject(error)
  }
)
// 对实例进行导出
export default instance
